package org.jbehave.scenario.finegrained.junit.monitoring;
import org.jbehave.scenario.JUnitScenario;
import org.jbehave.scenario.definition.ScenarioDefinition;
import org.jbehave.scenario.definition.StoryDefinition;
import org.jbehave.scenario.steps.CandidateStep;
import org.jbehave.scenario.steps.Steps;
import org.junit.runner.Description;
public class JUnitDescriptionGenerator {
public Description createDescriptionFrom(ScenarioDefinition scenario, Steps... candidateSteps) {
Description scenarioDescription = Description.createTestDescription(candidateSteps[0]
.getClass(), scenario.getTitle());
DescriptionTextUniquefier uniquefier = new DescriptionTextUniquefier();
for (String stringStep : scenario.getSteps()) {
for (Steps candidates : candidateSteps) {
for (CandidateStep candidate : candidates.getSteps()) {
if (candidate.matches(stringStep)) {
String uniqueString = uniquefier
.getUniqueDescription(getJunitSafeString(stringStep));
scenarioDescription.addChild(Description.createTestDescription(candidates
.getClass(), uniqueString + " - Scenario: " + scenario.getTitle()
+ ""));
}
}
}
}
return scenarioDescription;
}
public Description createDescriptionFrom(StoryDefinition story, Steps candidateSteps,
Class<? extends JUnitScenario> testClass) {
Description storyDescription = Description.createSuiteDescription(testClass);
for (ScenarioDefinition definition : story.getScenarios()) {
storyDescription.addChild(createDescriptionFrom(definition, candidateSteps));
}
return storyDescription;
}
public static String getJunitSafeString(String string) {
return string.replaceAll("\n", ", ").replaceAll("[\\(\\)]", "|");
}
}